/* Now onto GtkApplicationWindow... */
+typedef struct _GtkApplicationWindowPrivate GtkApplicationWindowPrivate;
struct _GtkApplicationWindowPrivate
{
GSimpleActionGroup *actions;
GtkShortcutsWindow *help_overlay;
};
+static void gtk_application_window_group_iface_init (GActionGroupInterface *iface);
+static void gtk_application_window_map_iface_init (GActionMapInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (GtkApplicationWindow, gtk_application_window, GTK_TYPE_WINDOW,
+ G_ADD_PRIVATE (GtkApplicationWindow)
+ G_IMPLEMENT_INTERFACE (G_TYPE_ACTION_GROUP, gtk_application_window_group_iface_init)
+ G_IMPLEMENT_INTERFACE (G_TYPE_ACTION_MAP, gtk_application_window_map_iface_init))
+
static void
gtk_application_window_update_menubar (GtkApplicationWindow *window)
{
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
gboolean should_have_menubar;
gboolean have_menubar;
- have_menubar = window->priv->menubar != NULL;
+ have_menubar = priv->menubar != NULL;
- should_have_menubar = window->priv->show_menubar &&
- (g_menu_model_get_n_items (G_MENU_MODEL (window->priv->app_menu_section)) ||
- g_menu_model_get_n_items (G_MENU_MODEL (window->priv->menubar_section)));
+ should_have_menubar = priv->show_menubar &&
+ (g_menu_model_get_n_items (G_MENU_MODEL (priv->app_menu_section)) ||
+ g_menu_model_get_n_items (G_MENU_MODEL (priv->menubar_section)));
if (have_menubar && !should_have_menubar)
{
- gtk_widget_unparent (window->priv->menubar);
- window->priv->menubar = NULL;
+ gtk_widget_unparent (priv->menubar);
+ priv->menubar = NULL;
}
if (!have_menubar && should_have_menubar)
GMenu *combined;
combined = g_menu_new ();
- g_menu_append_section (combined, NULL, G_MENU_MODEL (window->priv->app_menu_section));
- g_menu_append_section (combined, NULL, G_MENU_MODEL (window->priv->menubar_section));
+ g_menu_append_section (combined, NULL, G_MENU_MODEL (priv->app_menu_section));
+ g_menu_append_section (combined, NULL, G_MENU_MODEL (priv->menubar_section));
- window->priv->menubar = gtk_menu_bar_new_from_model (G_MENU_MODEL (combined));
- gtk_widget_set_parent (window->priv->menubar, GTK_WIDGET (window));
+ priv->menubar = gtk_menu_bar_new_from_model (G_MENU_MODEL (combined));
+ gtk_widget_set_parent (priv->menubar, GTK_WIDGET (window));
g_object_unref (combined);
}
}
gtk_application_window_update_shell_shows_app_menu (GtkApplicationWindow *window,
GtkSettings *settings)
{
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
gboolean shown_by_shell;
gboolean shown_by_titlebar;
if (shown_by_shell || shown_by_titlebar)
{
/* the shell shows it, so don't show it locally */
- if (g_menu_model_get_n_items (G_MENU_MODEL (window->priv->app_menu_section)) != 0)
- g_menu_remove (window->priv->app_menu_section, 0);
+ if (g_menu_model_get_n_items (G_MENU_MODEL (priv->app_menu_section)) != 0)
+ g_menu_remove (priv->app_menu_section, 0);
}
else
{
/* the shell does not show it, so make sure we show it */
- if (g_menu_model_get_n_items (G_MENU_MODEL (window->priv->app_menu_section)) == 0)
+ if (g_menu_model_get_n_items (G_MENU_MODEL (priv->app_menu_section)) == 0)
{
GMenuModel *app_menu = NULL;
name = g_strdup (_("Application"));
}
- g_menu_append_submenu (window->priv->app_menu_section, name, app_menu);
+ g_menu_append_submenu (priv->app_menu_section, name, app_menu);
g_free (name);
}
}
gtk_application_window_update_shell_shows_menubar (GtkApplicationWindow *window,
GtkSettings *settings)
{
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
gboolean shown_by_shell;
g_object_get (settings, "gtk-shell-shows-menubar", &shown_by_shell, NULL);
if (shown_by_shell)
{
/* the shell shows it, so don't show it locally */
- if (g_menu_model_get_n_items (G_MENU_MODEL (window->priv->menubar_section)) != 0)
- g_menu_remove (window->priv->menubar_section, 0);
+ if (g_menu_model_get_n_items (G_MENU_MODEL (priv->menubar_section)) != 0)
+ g_menu_remove (priv->menubar_section, 0);
}
else
{
/* the shell does not show it, so make sure we show it */
- if (g_menu_model_get_n_items (G_MENU_MODEL (window->priv->menubar_section)) == 0)
+ if (g_menu_model_get_n_items (G_MENU_MODEL (priv->menubar_section)) == 0)
{
GMenuModel *menubar = NULL;
menubar = gtk_application_get_menubar (gtk_window_get_application (GTK_WINDOW (window)));
if (menubar != NULL)
- g_menu_append_section (window->priv->menubar_section, NULL, menubar);
+ g_menu_append_section (priv->menubar_section, NULL, menubar);
}
}
}
gtk_application_window_list_actions (GActionGroup *group)
{
GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (group);
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
/* may be NULL after dispose has run */
- if (!window->priv->actions)
+ if (!priv->actions)
return g_new0 (char *, 0 + 1);
- return g_action_group_list_actions (G_ACTION_GROUP (window->priv->actions));
+ return g_action_group_list_actions (G_ACTION_GROUP (priv->actions));
}
static gboolean
GVariant **state)
{
GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (group);
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
- if (!window->priv->actions)
+ if (!priv->actions)
return FALSE;
- return g_action_group_query_action (G_ACTION_GROUP (window->priv->actions),
+ return g_action_group_query_action (G_ACTION_GROUP (priv->actions),
action_name, enabled, parameter_type, state_type, state_hint, state);
}
GVariant *parameter)
{
GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (group);
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
- if (!window->priv->actions)
+ if (!priv->actions)
return;
- g_action_group_activate_action (G_ACTION_GROUP (window->priv->actions), action_name, parameter);
+ g_action_group_activate_action (G_ACTION_GROUP (priv->actions), action_name, parameter);
}
static void
GVariant *state)
{
GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (group);
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
- if (!window->priv->actions)
+ if (!priv->actions)
return;
- g_action_group_change_action_state (G_ACTION_GROUP (window->priv->actions), action_name, state);
+ g_action_group_change_action_state (G_ACTION_GROUP (priv->actions), action_name, state);
}
static GAction *
const gchar *action_name)
{
GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (action_map);
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
- if (!window->priv->actions)
+ if (!priv->actions)
return NULL;
- return g_action_map_lookup_action (G_ACTION_MAP (window->priv->actions), action_name);
+ return g_action_map_lookup_action (G_ACTION_MAP (priv->actions), action_name);
}
static void
GAction *action)
{
GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (action_map);
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
- if (!window->priv->actions)
+ if (!priv->actions)
return;
- g_action_map_add_action (G_ACTION_MAP (window->priv->actions), action);
+ g_action_map_add_action (G_ACTION_MAP (priv->actions), action);
}
static void
const gchar *action_name)
{
GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (action_map);
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
- if (!window->priv->actions)
+ if (!priv->actions)
return;
- g_action_map_remove_action (G_ACTION_MAP (window->priv->actions), action_name);
+ g_action_map_remove_action (G_ACTION_MAP (priv->actions), action_name);
}
static void
iface->remove_action = gtk_application_window_remove_action;
}
-G_DEFINE_TYPE_WITH_CODE (GtkApplicationWindow, gtk_application_window, GTK_TYPE_WINDOW,
- G_ADD_PRIVATE (GtkApplicationWindow)
- G_IMPLEMENT_INTERFACE (G_TYPE_ACTION_GROUP, gtk_application_window_group_iface_init)
- G_IMPLEMENT_INTERFACE (G_TYPE_ACTION_MAP, gtk_application_window_map_iface_init))
-
enum {
PROP_0,
PROP_SHOW_MENUBAR,
static GParamSpec *gtk_application_window_properties[N_PROPS];
static void
-gtk_application_window_measure (GtkWidget *widget,
+gtk_application_window_measure (GtkWidget *widget,
GtkOrientation orientation,
int for_size,
int *minimum,
minimum_baseline, natural_baseline);
- gtk_widget_measure (window->priv->menubar, orientation, menubar_height, &menubar_min, &menubar_nat, NULL, NULL);
+ gtk_widget_measure (priv->menubar, orientation, menubar_height, &menubar_min, &menubar_nat, NULL, NULL);
_gtk_window_get_shadow_width (GTK_WINDOW (widget), &border);
menubar_min += border.left + border.right;
}
static void
-gtk_application_window_real_size_allocate (GtkWidget *widget,
- int width,
- int height,
- int baseline)
+gtk_application_window_real_size_allocate (GtkWidget *widget,
+ int width,
+ int height,
+ int baseline)
{
GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (widget);
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
- if (window->priv->menubar != NULL)
+ if (priv->menubar != NULL)
{
GtkAllocation menubar_allocation;
GtkAllocation child_allocation;
_gtk_window_set_allocation (GTK_WINDOW (widget), width, height, &child_allocation);
menubar_allocation = child_allocation;
- gtk_widget_measure (window->priv->menubar, GTK_ORIENTATION_VERTICAL,
+ gtk_widget_measure (priv->menubar, GTK_ORIENTATION_VERTICAL,
menubar_allocation.width,
&menubar_height, NULL, NULL, NULL);
menubar_allocation.height = menubar_height;
- gtk_widget_size_allocate (window->priv->menubar, &menubar_allocation, baseline);
+ gtk_widget_size_allocate (priv->menubar, &menubar_allocation, baseline);
child_allocation.y += menubar_height;
child_allocation.height -= menubar_height;
GActionGroup *
gtk_application_window_get_action_group (GtkApplicationWindow *window)
-{
- return G_ACTION_GROUP (window->priv->actions);
+{
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
+ return G_ACTION_GROUP (priv->actions);
}
static void
gtk_application_window_real_map (GtkWidget *widget)
{
GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (widget);
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
/* XXX could eliminate this by tweaking gtk_window_map */
- if (window->priv->menubar)
- gtk_widget_map (window->priv->menubar);
+ if (priv->menubar)
+ gtk_widget_map (priv->menubar);
GTK_WIDGET_CLASS (gtk_application_window_parent_class)->map (widget);
}
gtk_application_window_real_unmap (GtkWidget *widget)
{
GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (widget);
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
/* XXX could eliminate this by tweaking gtk_window_unmap */
- if (window->priv->menubar)
- gtk_widget_unmap (window->priv->menubar);
+ if (priv->menubar)
+ gtk_widget_unmap (priv->menubar);
GTK_WIDGET_CLASS (gtk_application_window_parent_class)->unmap (widget);
}
gpointer user_data)
{
GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (container);
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
- if (window->priv->menubar)
- callback (window->priv->menubar, user_data);
+ if (priv->menubar)
+ callback (priv->menubar, user_data);
GTK_CONTAINER_CLASS (gtk_application_window_parent_class)
->forall (container, callback, user_data);
GParamSpec *pspec)
{
GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (object);
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
switch (prop_id)
{
case PROP_SHOW_MENUBAR:
- g_value_set_boolean (value, window->priv->show_menubar);
+ g_value_set_boolean (value, priv->show_menubar);
break;
default:
GParamSpec *pspec)
{
GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (object);
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
switch (prop_id)
{
gtk_application_window_dispose (GObject *object)
{
GtkApplicationWindow *window = GTK_APPLICATION_WINDOW (object);
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
- if (window->priv->menubar)
+ if (priv->menubar)
{
- gtk_widget_unparent (window->priv->menubar);
- window->priv->menubar = NULL;
+ gtk_widget_unparent (priv->menubar);
+ priv->menubar = NULL;
}
- g_clear_object (&window->priv->app_menu_section);
- g_clear_object (&window->priv->menubar_section);
+ g_clear_object (&priv->app_menu_section);
+ g_clear_object (&priv->menubar_section);
- if (window->priv->help_overlay)
+ if (priv->help_overlay)
{
- gtk_widget_destroy (GTK_WIDGET (window->priv->help_overlay));
- g_clear_object (&window->priv->help_overlay);
+ gtk_widget_destroy (GTK_WIDGET (priv->help_overlay));
+ g_clear_object (&priv->help_overlay);
}
G_OBJECT_CLASS (gtk_application_window_parent_class)->dispose (object);
* That reduces our chances of being watched as a GActionGroup from a
* muxer constructed by GtkApplication.
*/
- g_clear_object (&window->priv->actions);
+ g_clear_object (&priv->actions);
}
static void
gtk_application_window_init (GtkApplicationWindow *window)
{
- window->priv = gtk_application_window_get_instance_private (window);
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
- window->priv->actions = gtk_application_window_actions_new (window);
- window->priv->app_menu_section = g_menu_new ();
- window->priv->menubar_section = g_menu_new ();
+ priv->actions = gtk_application_window_actions_new (window);
+ priv->app_menu_section = g_menu_new ();
+ priv->menubar_section = g_menu_new ();
- gtk_widget_insert_action_group (GTK_WIDGET (window), "win", G_ACTION_GROUP (window->priv->actions));
+ gtk_widget_insert_action_group (GTK_WIDGET (window), "win", G_ACTION_GROUP (priv->actions));
- /* window->priv->actions is the one and only ref on the group, so when
+ /* priv->actions is the one and only ref on the group, so when
* we dispose, the action group will die, disconnecting all signals.
*/
- g_signal_connect_swapped (window->priv->actions, "action-added",
+ g_signal_connect_swapped (priv->actions, "action-added",
G_CALLBACK (g_action_group_action_added), window);
- g_signal_connect_swapped (window->priv->actions, "action-enabled-changed",
+ g_signal_connect_swapped (priv->actions, "action-enabled-changed",
G_CALLBACK (g_action_group_action_enabled_changed), window);
- g_signal_connect_swapped (window->priv->actions, "action-state-changed",
+ g_signal_connect_swapped (priv->actions, "action-state-changed",
G_CALLBACK (g_action_group_action_state_changed), window);
- g_signal_connect_swapped (window->priv->actions, "action-removed",
+ g_signal_connect_swapped (priv->actions, "action-removed",
G_CALLBACK (g_action_group_action_removed), window);
}
gboolean
gtk_application_window_get_show_menubar (GtkApplicationWindow *window)
{
- return window->priv->show_menubar;
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
+ return priv->show_menubar;
}
/**
gtk_application_window_set_show_menubar (GtkApplicationWindow *window,
gboolean show_menubar)
{
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
g_return_if_fail (GTK_IS_APPLICATION_WINDOW (window));
show_menubar = !!show_menubar;
- if (window->priv->show_menubar != show_menubar)
+ if (priv->show_menubar != show_menubar)
{
- window->priv->show_menubar = show_menubar;
+ priv->show_menubar = show_menubar;
gtk_application_window_update_menubar (window);
guint
gtk_application_window_get_id (GtkApplicationWindow *window)
{
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
g_return_val_if_fail (GTK_IS_APPLICATION_WINDOW (window), 0);
- return window->priv->id;
+ return priv->id;
}
void
gtk_application_window_set_id (GtkApplicationWindow *window,
guint id)
{
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
g_return_if_fail (GTK_IS_APPLICATION_WINDOW (window));
- window->priv->id = id;
+ priv->id = id;
}
static void
gpointer user_data)
{
GtkApplicationWindow *window = user_data;
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
- if (window->priv->help_overlay)
- gtk_widget_show (GTK_WIDGET (window->priv->help_overlay));
+ if (priv->help_overlay)
+ gtk_widget_show (GTK_WIDGET (priv->help_overlay));
}
/**
gtk_application_window_set_help_overlay (GtkApplicationWindow *window,
GtkShortcutsWindow *help_overlay)
{
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
g_return_if_fail (GTK_IS_APPLICATION_WINDOW (window));
g_return_if_fail (help_overlay == NULL || GTK_IS_SHORTCUTS_WINDOW (help_overlay));
- if (window->priv->help_overlay)
- gtk_widget_destroy (GTK_WIDGET (window->priv->help_overlay));
- g_set_object (&window->priv->help_overlay, help_overlay);
+ if (priv->help_overlay)
+ gtk_widget_destroy (GTK_WIDGET (priv->help_overlay));
+ g_set_object (&priv->help_overlay, help_overlay);
- if (!window->priv->help_overlay)
+ if (!priv->help_overlay)
return;
gtk_window_set_modal (GTK_WINDOW (help_overlay), TRUE);
gtk_window_set_transient_for (GTK_WINDOW (help_overlay), GTK_WINDOW (window));
gtk_shortcuts_window_set_window (help_overlay, GTK_WINDOW (window));
- if (!g_action_map_lookup_action (G_ACTION_MAP (window->priv->actions), "show-help-overlay"))
+ if (!g_action_map_lookup_action (G_ACTION_MAP (priv->actions), "show-help-overlay"))
{
GSimpleAction *action;
action = g_simple_action_new ("show-help-overlay", NULL);
g_signal_connect (action, "activate", G_CALLBACK (show_help_overlay), window);
- g_action_map_add_action (G_ACTION_MAP (window->priv->actions), G_ACTION (action));
+ g_action_map_add_action (G_ACTION_MAP (priv->actions), G_ACTION (action));
g_object_unref (G_OBJECT (action));
}
}
GtkShortcutsWindow *
gtk_application_window_get_help_overlay (GtkApplicationWindow *window)
{
+ GtkApplicationWindowPrivate *priv = gtk_application_window_get_instance_private (window);
g_return_val_if_fail (GTK_IS_APPLICATION_WINDOW (window), NULL);
- return window->priv->help_overlay;
+ return priv->help_overlay;
}